Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] błąd $db->num_rows [PHP], Nie dziala sprawdzanie loginu a powinno.
Rafal_new_PHP
post
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 26.09.2008

Ostrzeżenie: (0%)
-----


Błąd $db->num_rows nie sprawdza czy istnieje w bazie Mysql login. Pomijane jest throw new Exception('Nazwa użytkownika zajęta — proszę wrócić i wybrać inną.');
echo 'Wykonanie zapytania nie powiodło się.'; Reszta działa okej. O to dokładny opis.

Kod
<?php
$login=$_POST['login'];
$haslo=$_POST['haslo'];
$mail=$_POST['mail'];
$imie=$_POST['imie'];
$pseldo=$_POST['pseldo'];
$rejestracja=$_POST['rejestracja'];


if (!$login || !$haslo || !$mail || !$imie || !$pseldo || !$rejestracja )
{
echo 'Nie podano wszystkich potrzebnych danych. </br>'
      . 'Wróć do strony rejestracji! Spróbuj ponownie';
exit;
}

if (!get_magic_quotes_gpc())
{
$login=addslashes($login);
$haslo=addslashes($haslo);
$mail=addslashes($mail);
$imie=addslashes($imie);
$pseldo=addslashes($pseldo);
}

@ $db = new mysqli('localhost', 'root', '', 'serwis');
if (mysqli_connect_errno())
{
echo 'Bład połaczenia z baza danych';
exit;
}
  $wynik2 = $db->query("select * from konto where login='$login'");
  if (!$wynik2)
{
     throw new Exception('Wykonanie zapytania nie powiodło się.');
   echo 'Wykonanie zapytania nie powiodło się.';
exit;
  
  
}
  if ($db->num_rows>0)
{
     throw new Exception('Nazwa użytkownika zajęta — proszę wrócić i wybrać inną.');
    echo 'Wykonanie zapytania nie powiodło się.';
exit;
  
}



$zapytanie ="insert into konto values ('".$login."', '".$haslo."', '".$mail."', '".$imie."', '".$pseldo."')";
$wynik = $db->query($zapytanie);
if ($wynik)
{
echo ' konto zarejestrowane ';
}




?>


Jeden kod juz naprawilem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) tylko ten na gorze (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) nie wiem jak.

Ten post edytował Rafal_new_PHP 26.09.2008, 16:19:22
Powód edycji: zmieniłem bbcode (cysiaczek)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Ad1.
Szkoda, że nie działa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Szkoda też, że nie szanujesz naszego czasu, bo gdybyś szanował, to podałbyś objawy owego "nie działania".

Ad2.
Ja mogę potwierdzić, że funkcji sesion_start() nie ma w PHP. Jest natomiast session_start(), której brak jest dość dziwny. Owszem, można skompilować php z dyrektywą --disable-session, ale używasz Windows z prekonfigurowanym oprogramowaniem WAMP, więc wątpię, aby nie było w nim obsługi sesji.
Posprawdzaj wszystko jeszcze raz.

Ad3.
http://pl2.php.net/manual/pl/function.filter-var.php
W pierwszy przykładzie masz metodę sprawdzania e-mail - innych się już nie stosuje.

Prosze jeszcze o zmianę tytułu tematu na taki, który mówi coś o problemie w nim poruszanym - jeśli tego nie zrobisz - zamknę temat.

Pozdrawiam.
Go to the top of the page
+Quote Post
Rafal_new_PHP
post
Post #3





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 26.09.2008

Ostrzeżenie: (0%)
-----


Cytat(Cysiaczek @ 26.09.2008, 16:46:11 ) *
Ad1.
Szkoda, że nie działa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Szkoda też, że nie szanujesz naszego czasu, bo gdybyś szanował, to podałbyś objawy owego "nie działania".

Ad2.
Ja mogę potwierdzić, że funkcji sesion_start() nie ma w PHP. Jest natomiast session_start(), której brak jest dość dziwny. Owszem, można skompilować php z dyrektywą --disable-session, ale używasz Windows z prekonfigurowanym oprogramowaniem WAMP, więc wątpię, aby nie było w nim obsługi sesji.
Posprawdzaj wszystko jeszcze raz.

Ad3.
http://pl2.php.net/manual/pl/function.filter-var.php
W pierwszy przykładzie masz metodę sprawdzania e-mail - innych się już nie stosuje.

Prosze jeszcze o zmianę tytułu tematu na taki, który mówi coś o problemie w nim poruszanym - jeśli tego nie zrobisz - zamknę temat.

Pozdrawiam.

Kod
Poprawilem i przepraszam. Prosze o pomoc
Go to the top of the page
+Quote Post
nevt
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


nie $db->num_rows tylko $wynik2->num_rows ...

manual... manual... i jeszcze raz manual... eeech ...
Go to the top of the page
+Quote Post
Zyx
post
Post #5





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


Mam też parę uwag i porad na przyszłość:

1. Nie radzę przyzwyczajać się do pola num_rows. Baza danych nigdy takiej informacji nie zwraca. PHP uzyskuje ją, ściągając zawczasu wszystkie wyniki i je przeliczając, co prowadzi do spadku wydajności i większego zużycia pamięci. Można to wyłączyć, dodając do wywołania metody query() dodatkowy parametr: MYSQLI_USE_RESULT. W PDO, którego użycie jest obecnie zalecane, jest to już domyślny sposób działania.

2. Jak rzucasz wyjątki, to wypadałoby je też później przechwycić. Ponadto po ich wysłaniu nie ma sensu dawać już żadnego kodu, bo można ze 100% pewnością powiedzieć, że się on nie wykona:

Kod
if(cośtam)
{
  throw new Exception;
  echo 'foo'; // Ta instrukcja NIGDY się nie wykona.
}


3. Po co przepisujesz wartości pól z $_POST do zmiennych? Co to, pola te nie są w Twojej opinii zmiennymi? Konkretniej chodzi mi o ten kawałek:

Kod
$login=$_POST['login'];
$haslo=$_POST['haslo'];
$mail=$_POST['mail'];
$imie=$_POST['imie'];
$pseldo=$_POST['pseldo'];
$rejestracja=$_POST['rejestracja'];


4. Tak samo tutaj:

Kod
$zapytanie ="insert into konto values ('".$login."', '".$haslo."', '".$mail."', '".$imie."', '".$pseldo."')";
$wynik = $db->query($zapytanie);


Po co ta dodatkowa zmienna $zapytanie? Robisz coś z tym jeszcze później, że jej potrzebujesz?

Ten post edytował Zyx 27.09.2008, 13:47:43
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 06:57